package com.gitee.taotaojs.mybootsuper.bean;


import com.gitee.taotaojs.util.ConstantUtil;
import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author TaoTaojs
 * @date 2020/7/14 2:33 PM
 * @param <T> 泛型，多半为vo
 * <p>Description</p>
 * <h1>通用前端返回数据格式</h1>
 * <h2>简介</h2>
 * 通用前端返回数据格式
 * <h3>主要功能：</h3>
 * <ol>
 *     <li>统一前端返回数据格式</li>
 * </ol>
 * 关联类:
 * 参考链接：
 * History: <br/>
 * <author>        <time>                      <version>          <desc>
 * TaoTaojs        2020/7/14 2:33 PM                V1.0          统一前端返回数据格式
 */
@Data
@AllArgsConstructor
public class AppBack<T> {

    /**
     * 返回状态 0正常 -97后台报错 如果返回-10 登录后访问 那么传入参数加上userId 与token 如果返回无权访问 说明这个接口是给后台调用的
     */
    private int status;
    /**
     * 返回的实体对象
     */
    private T result;
    /**
     * 返回的消息
     */
    private String msg;
    /**
     * 备用的消息
     */
    private String eMsg;

    /**
     * 激活的消息
     */
    private String action;

    public AppBack(int status, String msg){
        this.status=status;
        this.msg=msg;
        this.eMsg="error";
        result=null;
    }

    public AppBack(int status, String msg, String eMsg){
        this.status=status;
        this.msg=msg;
        this.eMsg=eMsg;
        result=null;
    }

    public AppBack(T data){
        result=data;
        status=0;
        msg="成功";
    }

    public AppBack(int status, T data, String msg, String eMsg){
        result=data;
        this.status=status;
        this.eMsg=eMsg;
        this.msg=msg;
    }

    public AppBack(){
        result=null;
        status=0;
        msg="成功";
        eMsg="success";
    }

    /**
     * 错误时的默认方法
     * @param msg 错误提示消息
     * @param <T> 返回值泛型
     * @return 返回对象
     */
    public static<T> AppBack<T> error(String msg){
        return new AppBack<>(-ConstantUtil.ONE, msg);
    }

    /**
     * 错误时的默认方法
     * @param <T> 返回值泛型
     * @return 返回对象
     */
    public static<T> AppBack<T> error(){
        return new AppBack<>(-ConstantUtil.ONE, "资源错误");
    }

    /**
     * 成功时的默认方法
     * @param msg 成功提示消息
     * @param <T> 返回值泛型
     * @return 返回对象
     */
    public static<T> AppBack<T> success(String msg){
        return new AppBack<>(ConstantUtil.ZERO, msg);
    }

    /**
     * 成功时的默认方法
     * @param <T> 返回值泛型
     * @return 返回对象
     */
    public static<T> AppBack<T> success(){
        return new AppBack<>(ConstantUtil.ZERO, "成功");
    }
}
